import Layout from '@/layout'
import Vue from 'vue'
import Router from 'vue-router'
import store from '@/store'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

let loginAlertShown = false;

Vue.use(Router)
const router = new Router({
  routes: [
    { path: '/login', name: 'Login', component: () => import('@/views/login/index'), meta: { title: '登录', bodyBackground: '#fbfbfb' } },
    { path: '/register', name: 'Register', component: () => import('@/views/register/index'), meta: { title: '注册', bodyBackground: '#fbfbfb' } },
    {
      path: '/',
      component: Layout,
      redirect: '/index',
      children: [
        {
          path: 'index',
          component: () => import('@/views/dashboard/index'),
          name: 'Dashboard',
          meta: { title: '首页' }
        }
      ]
    },
    {
      path: '/paper',
      component: Layout,
      children: [
        {
          path: 'index',
          component: () => import('@/views/paper/index'),
          name: 'PaperIndex',
          meta: { title: '试卷中心' }
        }
      ]
    },
    {
      path: '/company',
      component: Layout,
      children: [
        {
          path: 'index',
          component: () => import('@/views/company/list'),
          name: 'CompanyIndex',
          meta: { title: '求职广场' }
        }
      ]
    },

    {
      path: '/forum',
      component: Layout,
      children: [
        {
          path: 'index',
          component: () => import('@/views/forum/index'),
          name: 'ForumIndex',
          meta: { title: '论坛社区' }
        },
        {
          path: 'create',
          component: () => import('@/views/forum/create'),
          name: 'ForumCreate',
          meta: { title: '发布帖子' }
        },
        {
          path: 'detail',
          component: () => import('@/views/forum/detail'),
          name: 'ForumDetail',
          meta: { title: '帖子详情' }
        }
      ]
    },

    {
      path: '/record',
      component: Layout,
      children: [
        {
          path: 'index',
          component: () => import('@/views/record/index'),
          name: 'RecordIndex',
          meta: { title: '考试记录' }
        }
      ]
    },
    {
      path: '/question',
      component: Layout,
      children: [
        {
          path: 'index',
          component: () => import('@/views/question-error/index'),
          name: 'QuestionErrorIndex',
          meta: { title: '错题本' }
        }
      ]
    },
    {
      path: '/user',
      component: Layout,
      children: [
        {
          path: 'index',
          component: () => import('@/views/user-info/index'),
          name: 'UserInfo',
          meta: { title: '个人中心' }
        },
        {
          path: 'advice',
          component: () => import('@/views/user-info/advice'),
          name: 'adviceAdd',
          meta: { title: '意见反馈' }
        }

      ]
    },
    {
      path: '/user',
      component: Layout,
      children: [
        {
          path: 'message',
          component: () => import('@/views/user-info/message'),
          name: 'UserMessage',
          meta: { title: '消息中心' }
        }
      ]
    },
    { path: '/do', name: 'ExamPaperDo', component: () => import('@/views/exam/paper/do'), meta: { title: '试卷答题' } },
    { path: '/edit', name: 'ExamPaperEdit', component: () => import('@/views/exam/paper/edit'), meta: { title: '试卷批改' } },
    { path: '/read', name: 'ExamPaperRead', component: () => import('@/views/exam/paper/read'), meta: { title: '试卷查看' } },
    { path: '*', component: () => import('@/views/error-page/404'), meta: { title: '404' }
    }
  ]
})

// 添加全局前置守卫检查登录状态
router.beforeEach(async (to, from, next) => {
  // 开始进度条
  NProgress.start()

  // 设置页面标题
  if (to.meta.title !== undefined) {
    document.title = to.meta.title
  } else {
    document.title = '\u200E'
  }

  // 设置背景
  if (to.meta.bodyBackground !== undefined) {
    document.querySelector('body').setAttribute('style', 'background: ' + to.meta.bodyBackground)
  } else {
    document.querySelector('body').removeAttribute('style')
  }

  // 添加百度统计代码
  if (to.path) {
    // eslint-disable-next-line no-undef
    _hmt.push(['_trackPageview', '/#' + to.fullPath])
  }
  // 检查登录状态，排除登录和注册页面
  const noLoginRequired = ['Login', 'Register'].includes(to.name) || to.path === '/error-page/404'
  // 只有当访问需要登录的页面且用户未登录时才拦截
  if (!noLoginRequired && !store.getters.isLogin) {
    // 结束进度条
    NProgress.done()
    // 用户未登录，且访问需要登录的页面
    alert('请先登录')

    setTimeout(() => {
      loginAlertShown = false
    }, 5000)

    next('/login')
    return
  }
  next()
})

router.afterEach(() => {
  // 结束进度条
  NProgress.done()
})

export { router }
